home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 25 / AACD 25.iso / AACD / Magazine / Online / QMail / source / scan_nbblong.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-04-15  |  1.2 KB  |  34 lines

  1. #include "scan.h"
  2.  
  3. unsigned int scan_nbblong(s,n,base,bext,u)
  4. char *s; unsigned int n; unsigned int base; unsigned int bext; unsigned long *u;
  5. /* Note that n == 0 means scan forever. Hopefully this is a good choice. */
  6. {
  7.   unsigned int pos; unsigned long result; unsigned long c;
  8.   pos = 0; result = 0;
  9.   while (((c = (unsigned long) (unsigned char) (s[pos] - '0')) < base)
  10.        ||(((c = (unsigned long) (unsigned char) (s[pos] - 'a')) < bext)
  11.         &&(c = c + base))
  12.        ||(((c = (unsigned long) (unsigned char) (s[pos] - 'A')) < bext)
  13.         &&(c = c + base))
  14.         ) /* this gets the job done */
  15.     { result = result * (base + bext) + c; ++pos; if (pos == n) break; }
  16.   *u = result; return pos;
  17. }
  18.  
  19. unsigned int scan_nbbint(s,n,base,bext,u)
  20. char *s; unsigned int n; unsigned int base; unsigned int bext; unsigned int *u;
  21. {
  22.   unsigned int pos; unsigned long result;
  23.   pos = scan_nbblong(s,n,base,bext,&result);
  24.   *u = result; return pos;
  25. }
  26.  
  27. unsigned int scan_nbbshort(s,n,base,bext,u)
  28. char *s; unsigned int n; unsigned int base; unsigned int bext; unsigned short *u;
  29. {
  30.   unsigned int pos; unsigned long result;
  31.   pos = scan_nbblong(s,n,base,bext,&result);
  32.   *u = result; return pos;
  33. }
  34.